package com.uoko.common.validate;

import com.uoko.common.string.Strings;

import java.util.Collection;

/**
 * <p>
 * 验证工具类
 * </p>
 *
 * @author xianguo
 * Email xianguo@uoko.com
 * created by 2018/6/6 0006
 */
public class ValidateUtil {
    /**
     * <pre>
     * 比较是否相等
     * o1=null o2==null   结果:false
     * <pre>
     * @param o1
     * @param o2
     * @return
     */
    public static boolean equals(Object o1,Object o2) {
        if (o1 == null || o2 == null)
            return false;
        return o1.equals(o2);
    }

    /**
     * 是否为空
     * @param arr
     * @return
     */
    public static boolean isEmpty(Collection<?> arr) {
        return arr == null || arr.size() == 0;
    }

    /**
     * 是否为空
     * @param arrs
     * @return
     */
    public static boolean isEmpty(Collection<?>...arrs) {
        for (Collection<?> arr : arrs) {
            if(isEmpty(arr))
                return true;
        }
        return false;
    }

    /**
     * 是否不为空
     * @param arr
     * @return
     */
    public static boolean isNotEmpty(Collection<?> arr) {
        return !isEmpty(arr);
    }

    /**
     * 是否不为空
     * @param arrs
     * @return
     */
    public static boolean isNotEmpty(Collection<?>...arrs) {
        return !isEmpty(arrs);
    }

    /**
     * 是否为空
     * @param objs
     * @return
     */
    public static boolean isNull(Object...objs) {
        for (Object obj : objs) {
            if (obj == null)
                return true;
        }
        return false;
    }

    /**
     * 是否不为空
     * @param objs
     * @return
     */
    public static boolean isNotNull(Object...objs) {
        return !isNull(objs);
    }

    /**
     * 是否为空
     * <pre>
     * null  =>  true
     * ""  =>  true
     * "  "  =>  true
     * Collection.size() == 0  =>  true
     * </pre>
     * @param objs
     * @return
     */
    public static boolean isEmptyFull(Object...objs) {
        for (Object obj : objs) {
            if (obj == null)
                return true;
            if (obj instanceof String && Strings.isBlank((String)obj))
                return true;
            if (obj instanceof Collection && isEmpty((Collection<?>)obj))
                return true;
        }
        return false;
    }

    /**
     * 是否不为空
     * <pre>
     * null  =>  true
     * ""  =>  true
     * "  "  =>  true
     * Collection.size() == 0  =>  true
     * </pre>
     * @param objs
     * @return
     */
    public static boolean isNotEmptyFull(Object...objs) {
        return !isEmptyFull(objs);
    }
}
